package site.addzero.cli.autoinit.common

import org.koin.core.annotation.Single
import site.addzero.cli.platform.PlatformTools
import site.addzero.cli.platform.runBoolean
import site.addzero.cli.platform.runCmd
import site.addzero.task.InitTask

/**
 * pnpm 环境自动初始化类
 * 负责检查 pnpm 是否安装并进行相关配置
 */
@Single
class AutoInitPnpm : InitTask {
    override val support: Boolean = true

    /**
     * 执行 pnpm 初始化任务
     */
    override suspend fun asynctask(): Boolean {
        // 检查 pnpm 是否已安装
        if (!isPnpmInstalled()) {
            println("pnpm 未安装")
            installPnpmIfNeeded()
        } else {
            println("pnpm 已安装")
            setupPnpm()
        }

        return true
    }

    /**
     * 检查 pnpm 是否已安装
     */
    private fun isPnpmInstalled(): Boolean {
        return "pnpm --version".runBoolean()
    }

    /**
     * 根据需要安装 pnpm
     */
    private fun installPnpmIfNeeded() {
        val installPnpm = PlatformTools.readBoolWithTrue("是否安装 pnpm？")
        if (installPnpm == true) {
            println("正在安装 pnpm...")
            val result = "npm install -g pnpm".runCmd()

            if (result.isSuccess()) {
                println("pnpm 安装成功")
                setupPnpm()
            } else {
                println("pnpm 安装失败: ${result.error}")
            }
        }
    }

    /**
     * 配置 pnpm 环境
     */
    private fun setupPnpm() {
        // 运行 pnpm setup 命令配置环境变量
        println("正在配置 pnpm 环境...")
        val result = "pnpm setup".runCmd()

        if (result.isSuccess()) {
            println("pnpm 环境配置完成")
        } else {
            // 即使 setup 命令执行失败，也可能是已经配置好了
            println("pnpm 环境配置可能已完成或不需要配置")
        }
    }
}
